package org.knot.mockejb3.interceptor;


/**
 * Interceptors intercept calls to an object to perform some actions, such as logging, 
 * transaction management and so on. 
 * Interceptor can perform actions before the call, then it must call the 
 * {@link InvocationContext#proceed proceed} method 
 * and after that it can perform post-call actions if needed. 
 * 
 */
public interface Interceptor {

    /**
     * Performs pre and post invocation actions for the target object call.
     * @param invocationContext provides the info about this call. Also calls interceptors in 
     * turn according to their order in the chain. invocationContext provides access to the return value
     * and thrown exceptions of this call.
     */
    void intercept( InvocationContext invocationContext )  throws Exception;

}
